/**
 * 并发执行任务
 */

function paralleTask(tasks, paralleCount = 2) {
    return new Promise(resolve => {
        if (tasks.length === 0) {
            resolve()
            return
        }

        let finishCount = 0  // 计算结束了多少个任务了

        let nextIndex = 0; // 下一个任务的下标
        function _run() {
            // 运行下一个任务
            const task = tasks[nextIndex]
            nextIndex++
            task().then(() => {
                finishCount++;
                // 确定还有下一个的时候再运行下一个任务
                if (nextIndex < tasks.length) {
                    _run()
                } else {
                    // 没有下一个任务 且 当前没有正在运行任务的时候算结束
                    // 也就是说 每次运行完一个任务 x++ 一次 x=tasks.length 的时候算所有的运行完了
                    if (finishCount == tasks.length) {
                        resolve()
                        return
                    }
                }
            })
        }

        // 一次运行 并发次数 个 任务
        for (let i = 0; i < paralleCount && i < tasks.length; i++) {
            _run()
        }
    })
}
module.exports = paralleTask 